package applicationModels;

import java.util.TreeSet;

import org.joda.time.LocalDate;
import org.uqbar.commons.model.ObservableUtils;
import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;
import org.uqbar.commons.utils.TransactionalAndObservable;

import vista.FechaToStringAdapter;
import vista.ListadoPlanificacionesWindow;

import com.uqbar.poo.aop.ObservableBehavior;

import database.Tienda;
import modelo.Planificacion;

@Observable
public class ListadoPlanificaciones {
	

	private LocalDate fechaCrear;
	private Planificacion planificacionSeleccionada;
	private TreeSet<Planificacion> planificaciones;
	

	public ListadoPlanificaciones(){
		
		this.planificaciones = Tienda.getInstance().getPlanificaciones();
		refrescarFecha();
		
		
		//planificaciones=this.filtrarPlanificaciones();
	}

	public void refrescarFecha() {
		this.setFechaCrear(Tienda.getInstance().getPlanificaciones().last().getFecha().plusDays(1));
	}
	
	public void refreshPlanificaciones(){
		this.setPlanificaciones(null);
		this.setPlanificaciones(Tienda.getInstance().getPlanificaciones());
	}

	private TreeSet<Planificacion> filtrarPlanificaciones() {
		TreeSet<Planificacion> resultados=new TreeSet<Planificacion>();
		for(Planificacion plani:Tienda.getInstance().getPlanificaciones()){
			if(plani.getFecha().equals(new LocalDate())||
					plani.getFecha().isAfter(new LocalDate())){
				resultados.add(plani);
			}
		}
		return resultados;
	}
	
	public Planificacion getPlanificacionSeleccionada() {
		return planificacionSeleccionada;
	}
	
	public void setPlanificacionSeleccionada(Planificacion planificacionSeleccionada) {
		this.planificacionSeleccionada = planificacionSeleccionada;
	}
	
	public LocalDate getFechaCrear() {
		return fechaCrear;
	}
	
	public void setFechaCrear(LocalDate fechaCrear) {
		
		if(this.contieneFechaAlgunaPlanificacion(fechaCrear)){
			throw new UserException("Ya existe planificacion para esta fecha");
		};
		this.fechaCrear = fechaCrear;
		new ObservableUtils().firePropertyChanged(this, "setFechaCrear", this.fechaCrear);
	}
	
	private boolean contieneFechaAlgunaPlanificacion(LocalDate fechaCrear2) {
		for(Planificacion p: Tienda.getInstance().getPlanificaciones()){
			if(p.getFecha().equals(fechaCrear2)){
				return true;
			}
		}
		return false;
	}

	public TreeSet<Planificacion> getPlanificaciones() {
		return planificaciones;
	}
	
	public void setPlanificaciones(TreeSet<Planificacion> planificaciones) {
		this.planificaciones = planificaciones;
		//new ObservableUtils().firePropertyChanged(this, "", this.planificaciones); 
	}

	
}
